package org.huangrui.design.pattern.singleton;

/**
 * 在内部类被加载和初始化时，才创建INSTANCE实例对象
 * 静态内部类不会自动随着外部类的加载和初始化而初始化，它是要单独去加载和初始化的。
 * 因为是在内部类加载和初始化时，创建的，因此是线程安全的
 * @author hr
 * @create 2025-09-09 15:19
 */
public class Singleton6 {
	static {
		System.out.println("外部类初始化");
	}
	private Singleton6(){
		System.out.println("外部类对象的创建");
	}

	private static class Inner{
		static {
			System.out.println("内部类初始化");
		}
		private static final Singleton6 INSTANCE = new Singleton6();
	}

	public static Singleton6 getInstance(){
		return Inner.INSTANCE;
	}

	public static void otherMethod(){
		System.out.println("尚硅谷让天下没有难学的技术！");
	}

	public static void main(String[] args) {
		Singleton6 s1 = Singleton6.getInstance();
		Singleton6 s2 = Singleton6.getInstance();
		System.out.println(s1 == s2);

		Singleton6.otherMethod();
	}
}
